﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.DuLieuChuan;
using Janus.Windows.GridEX;

using Company.BLL.KDT.GC;
using System.Data;
using Company.BLL.KDT;
namespace Company.Interface.KDT.GC
{
    public partial class DinhMucGCSendForm : BaseForm
    {
        public DinhMucDangKy dmDangKy = new DinhMucDangKy();
        private Company.BLL.KDT.GC.DinhMucCollection dmCollection=new Company.BLL.KDT.GC.DinhMucCollection();
        public Company.BLL.KDT.GC.HopDong hopdong;
        //-----------------------------------------------------------------------------------------
        public DinhMucGCSendForm()
        {
            InitializeComponent();
            cbHopDong.ValueChanged -= new System.EventHandler(this.cbHopDong_ValueChanged);
            this.ctrDonViHaiQuan.ValueChanged -= new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);                          
          
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo dữ liệu chuẩn.
        /// </summary>
        private void khoitao_DuLieuChuan()
        {
            this._DonViHaiQuan = DonViHaiQuan.SelectAll();
            this._DonViTinh = DonViTinh.SelectAll();           
        }

        //-----------------------------------------------------------------------------------------
        private void DinhMucGCSendForm_Load(object sender, EventArgs e)
        {
            HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            this.khoitao_DuLieuChuan();
            BindHopDong();
            if (dmDangKy.ID > 0)
            {
                if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                {
                    cmdAddNew1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdSave1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdSend1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    NhanDuLieu1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    lblTrangThai.Text = "Đã duyệt";
                    txtSoTiepNhan.Text = dmDangKy.SoTiepNhan.ToString();
                }
                else if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET)
                {
                    lblTrangThai.Text = "Chờ duyệt";
                    HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.True;
                }
                else
                {
                    HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;                    
                    NhanDuLieu1.Enabled = Janus.Windows.UI.InheritableBoolean.False;                  
                }
                txtSoTiepNhan.Text = dmDangKy.SoTiepNhan.ToString();
                ctrDonViHaiQuan.Ma = hopdong.MaHaiQuan;
                BindHopDong();
                cbHopDong.Value = hopdong.ID;
                dmCollection = Company.BLL.KDT.GC.DinhMuc.SelectCollectionBy_Master_ID(dmDangKy.ID);
                cbHopDong.ReadOnly=true;
                ctrDonViHaiQuan.ReadOnly = true;
            }
            dgList.DataSource = dmCollection;
            cbHopDong.ValueChanged += new System.EventHandler(this.cbHopDong_ValueChanged);
            this.ctrDonViHaiQuan.ValueChanged += new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                          

        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Bind dữ liệu vào combobox hợp đồng
        /// </summary>
        private void BindHopDong()
        {
            string maHQ = ctrDonViHaiQuan.Ma;            
            DataTable dt;           
            {
                string where = string.Format("[MaHaiQuan] LIKE '%{0}%'", maHQ);
                dt = HopDong.SelectDynamic(where, "").Tables[0];
            }           
            cbHopDong.DataSource = dt;
            cbHopDong.DisplayMember = "SoHopDong";
            cbHopDong.ValueMember = "ID";
            cbHopDong.Text = "";
        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {
            if (dmDangKy.ID== 0)
            {
                ShowMessage("Phải lưu trữ định mức trước", false);
                return;
            }
            if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Định mức đã được duyệt", false);
                return;
            }
            WSForm wsForm = new WSForm();
            wsForm.ShowDialog(this);
            if (!wsForm.IsReady) return;
            try
            {
                this.Cursor = Cursors.WaitCursor;
                dmDangKy.WSSend();
                txtSoTiepNhan.Text = dmDangKy.SoTiepNhan.ToString();
                lblTrangThai.Text = "Chờ duyệt";
                HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.True;                
                this.Cursor = Cursors.Default;
                ShowMessage("Định mức đã được tiếp nhận. Số tiếp nhận là "+dmDangKy.SoTiepNhan.ToString(),false);
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message == "1")
                    ShowMessage("Định mức này đã được duyệt chính thức trên hải quan", false);
                else if (ShowMessage("Gửi định mức không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC_HOP_DONG;
                    hd.TrangThai = dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
        }
        public void Huy()
        {
            if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Định mức đã được duyệt", false);
                return;
            }
            WSForm wsForm = new WSForm();
            wsForm.ShowDialog(this);
            if (!wsForm.IsReady) return;
            try
            {
                this.Cursor = Cursors.WaitCursor; ;
                dmDangKy.WSCancel();
                txtSoTiepNhan.Text = "";
                lblTrangThai.Text = "Chưa khai báo";
                HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;                
                this.Cursor = Cursors.Default;
                ShowMessage("Định mức đã được hủy", false);
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message == "1")
                    ShowMessage("Định mức này đã được duyệt chính thức trên hải quan", false);
                else if (ShowMessage("Hủy định mức không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC_HOP_DONG;
                    hd.TrangThai = dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.HUY_KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Thêm mới định mức.
        /// </summary>
        private void add()
        {
            cvError.Validate();
            if (!cvError.IsValid) return;
            try
            {
                hopdong = Company.BLL.KDT.GC.HopDong.Load((long)Convert.ToInt64(cbHopDong.Value.ToString()));
                dmDangKy.ID_HopDong = hopdong.ID;
            }
            catch (Exception ex)
            {
                ShowMessage("Không có hợp đồng này", false);
                return;
            }
            DinhMucGCEditForm f = new DinhMucGCEditForm();
            f.hopdong = hopdong;
            f.dmCollection = dmCollection;
            //f.dmdk = dmDangKy;
            f.isAdd = true;
            f.dmdk = dmDangKy;
            f.ShowDialog();
            dgList.Refetch();
        }

        //-----------------------------------------------------------------------------------------
        private void ctrDonViHaiQuan_ValueChanged(object sender, EventArgs e)
        {
            if (dmCollection.Count > 0)
            {
                foreach (DinhMuc dm in dmCollection)
                {
                    if (dm.ID == 0 || dmDangKy.ID == 0)
                    {
                        DialogResult d = MessageBox.Show("Bạn có muốn lưu lại thông tin đã nhập không", "Lưu thông tin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                        if (d == DialogResult.Yes)
                        {
                            save();
                            dmCollection.Clear();
                            dmDangKy = new DinhMucDangKy();
                            BindHopDong();
                            dgList.Refetch();
                            return;
                        }
                        else if (d == DialogResult.No)
                        {
                            dmCollection.Clear();
                            dmDangKy = new DinhMucDangKy();
                            dgList.Refetch();
                            BindHopDong();
                            return;
                        }
                        else
                        {

                            this.ctrDonViHaiQuan.ValueChanged -= new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                            ctrDonViHaiQuan.Ma = HopDong.Load(dmDangKy.ID_HopDong).MaHaiQuan;
                            this.ctrDonViHaiQuan.ValueChanged += new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                            return;
                        }
                    }
                }
            }          
            {
                dmCollection.Clear();
                dmDangKy = new DinhMucDangKy();
                BindHopDong();
                dgList.Refetch();
            }
        }

        //-----------------------------------------------------------------------------------------
        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                //e.Row.Cells["DVT_ID"].Text = this.DonViTinh_GetName(e.Row.Cells["DVT_ID"].Value.ToString());
            }
        }

        //-----------------------------------------------------------------------------------------
        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            Company.BLL.KDT.GC.DinhMuc dm = new Company.BLL.KDT.GC.DinhMuc();
            dm.MaNguyenPhuLieu = e.Row.Cells[2].Text.Trim();
            dm.MaSanPham = e.Row.Cells[1].Text.Trim();
            dm.TyLeHaoHut = Convert.ToDecimal( e.Row.Cells[4].Text);
            dm.DinhMucSuDung = Convert.ToDecimal( e.Row.Cells[3].Text);
            try
            {
                dm.ID = (long)Convert.ToInt64(e.Row.Cells[5].Text);
            }
            catch { dm.ID = 0; }
            dm.NPL_TuCungUng = Convert.ToDecimal( e.Row.Cells[6].Text);
            dm.GhiChu = e.Row.Cells[7].Text;
            DinhMucGCEditForm f = new DinhMucGCEditForm();            
            f.hopdong = hopdong;
            f.dmdk = dmDangKy;
            f.dmCollection = dmCollection;
            f.DMDetail = dm;
            f.isAdd = false;
            f.ShowDialog();
            dgList.Refetch();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Lưu thông tin.
        /// </summary>
        private void save()
        {
            cvError.Validate();
            if (!cvError.IsValid) return;
            try
            {
                hopdong = Company.BLL.KDT.GC.HopDong.Load((long)Convert.ToInt64(cbHopDong.Value.ToString()));
            }
            catch (Exception ex)
            {
                ShowMessage("Không có hợp đồng này", false);
                return;
            }
            try
            {
                if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                {
                    ShowMessage("Định mức đã được duyệt. Bạn không thể thay đổi", false);
                    return;
                }
                this.Cursor = Cursors.WaitCursor;
                if (dmCollection.Count > 0)
                {
                    // Master.
                    if (this.dmDangKy.ID == 0)
                    {
                        this.dmDangKy.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                        //this.dmDangKy.SoTiepNhan = 0;
                        //this.dmDangKy.NgayTiepNhan = DateTime.Today;

                    }
                    // Detail.
                    int sttHang = 1;
                    foreach (Company.BLL.KDT.GC.DinhMuc nplD in dmCollection)
                    {
                        nplD.STTHang = sttHang++;
                    }
                    dmDangKy.ID_HopDong = hopdong.ID;
                    if (dmDangKy.ID == 0)
                    {
                        if (DinhMucDangKy.insertDinhMucAndDinhMucDangKy(dmCollection, dmDangKy))
                            ShowMessage("Cập nhật thành công", false);
                        else
                            ShowMessage("Cập nhật không thành công", false);
                    }
                    else
                    {
                        if (DinhMucDangKy.InsertUpdate(dmDangKy, dmCollection))
                            ShowMessage("Cập nhật thành công", false);
                        else
                            ShowMessage("Cập nhật không thành công", false);
                    }
                }
                else
                {
                    ShowMessage("Bạn chưa chọn định mức", false);
                 
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi:" + ex.Message);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }        
        }

        //-----------------------------------------------------------------------------------------
        private void cmMain_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "cmdSave":
                    this.save();
                    break;
                case "cmdAdd":
                    this.add();
                    break;
                case "cmdSend":
                    this.send();
                    break;
                case "HuyKhaiBao":
                    this.Huy();
                    break;
                case "NhanDuLieu":
                    this.NhanDuLieu12();
                    break;
            }
        }
        private void NhanDuLieu12()
        {
            try
            {               
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    try
                    {
                        this.Cursor = Cursors.WaitCursor;
                        dmDangKy.WSRequest();                        
                        this.Cursor = Cursors.Default;
                        if (dmDangKy.TrangThaiXuLy == 1)
                        {
                            lblTrangThai.Text = "Đã duyệt";
                            cmdAddNew1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                            cmdSave1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                            HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                            cmdSend1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                            NhanDuLieu1.Enabled = Janus.Windows.UI.InheritableBoolean.False;              
                        }
                        ShowMessage("Đã nhận dữ liệu thành công.", false);                        
                    }
                    catch (Exception ex)
                    {
                        this.Cursor = Cursors.Default;
                        if (ex.Message == "1")
                            ShowMessage("Định mức này đã được duyệt chính thức trên hải quan", false);
                        else
                            throw ex;
                    }                
            }
            catch (Exception Ex)
            {
                if (ShowMessage("Nhận dữ liệu định mức không thành công.\nLỗi: " + Ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC_HOP_DONG;
                    hd.TrangThai = dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.NHAN_THONG_TIN;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
        }
        private void cbHopDong_ValueChanged(object sender, EventArgs e)
        {
            if (dmCollection.Count > 0)
            {
                foreach (DinhMuc dm in dmCollection)
                {
                    if (dm.ID == 0 || dmDangKy.ID==0)
                    {
                        DialogResult d = MessageBox.Show("Bạn có muốn lưu lại thông tin đã nhập không", "Lưu thông tin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                        if (d == DialogResult.Yes)
                        {
                            save();
                            dmCollection.Clear();
                            dmDangKy = new DinhMucDangKy();                            
                            return;
                        }
                        else if (d == DialogResult.No)
                        {
                            dmCollection.Clear();
                            dmDangKy = new DinhMucDangKy();
                            dgList.Refetch();                            
                        }
                        else
                        {
                            cbHopDong.ValueChanged -= new System.EventHandler(this.cbHopDong_ValueChanged);
                            cbHopDong.Value = hopdong.ID;
                            this.cbHopDong.ValueChanged += new System.EventHandler(this.cbHopDong_ValueChanged);
                            return;
                        }
                    }
                }
            }
            try{
                hopdong = Company.BLL.KDT.GC.HopDong.Load((long)Convert.ToInt64(cbHopDong.Value.ToString()));
                dmDangKy.ID_HopDong = hopdong.ID;
            }
            catch(Exception ex)
            {
                hopdong = new HopDong();                                 
            }
        }

        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Định mức này đã duyệt chính thức. Không được chỉnh sửa", false);
                e.Cancel = true;
                return;
            }
            if (e.Row.RowType == RowType.Record)
            {
                if (ShowMessage("Bạn có muốn xóa định mức của sản phẩm này không?", true) == "Yes")
                {
                    Company.BLL.KDT.GC.DinhMuc dm = new Company.BLL.KDT.GC.DinhMuc();
                    dm.ID = (long)Convert.ToInt64(e.Row.Cells[5].Text);
                    if (dm.ID > 0)
                    {
                        dm.Delete();
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
       

      
    }
}